import { get, post } from '@/utils/request'
import type { ApiResponse } from '@/utils/request'

// 用户信息类型
export interface UserVO {
  id: number
  username: string
  email: string
  phone: string
  role: string
  studentNumber: string
  createdAt: string
}

// 登录请求参数
export interface LoginRequest {
  studentNumber: string
  password: string
  [key: string]: unknown // 添加索引签名
}

// 注册请求参数
export interface RegisterRequest {
  username: string
  password: string
  checkPassword: string
  email: string
  captcha: string
  phone: string
  role: string
  studentNumber: string
  [key: string]: unknown // 添加索引签名
}

// 发送验证码请求参数
export interface CaptchaRequest {
  email: string
  [key: string]: unknown // 添加索引签名
}

/**
 * 用户登录
 * @param data 登录信息
 */
export function login(data: LoginRequest): Promise<ApiResponse<UserVO>> {
  return post<UserVO>('/user/login', data)
}

/**
 * 用户注册
 * @param data 注册信息
 */
export function register(data: RegisterRequest): Promise<ApiResponse<number>> {
  return post<number>('/user/register', data)
}

/**
 * 发送验证码
 * @param email 邮箱地址
 */
export function sendCaptcha(email: string): Promise<ApiResponse<string>> {
  return post<string>('/captcha', { email })
}

/**
 * 验证验证码是否正确
 * @param email 邮箱地址
 * @param captcha 验证码
 */
export function verifyCaptcha(email: string, captcha: string): Promise<ApiResponse<boolean>> {
  return get<boolean>('/user/verify-captcha', { email, captcha })
}

/**
 * 退出登录
 */
export function logout(): Promise<ApiResponse<boolean>> {
  return post<boolean>('/user/logout')
}

/**
 * 获取当前登录用户信息
 */
export function getCurrentUser(): Promise<ApiResponse<UserVO>> {
  return get<UserVO>('/user/current')
}

/**
 * 忘记密码第一步：验证身份
 */
export function forgetPasswordStep1(data: {
  email: string
  captcha: string
  studentNumber: string
  [key: string]: unknown // 添加索引签名
}): Promise<ApiResponse<string>> {
  return post<string>('/user/forget-password/step1', data)
}

/**
 * 忘记密码第二步：重置密码
 */
export function forgetPasswordStep2(data: {
  studentNumber: string
  resetToken: string
  newPassword: string
  checkPassword: string
  [key: string]: unknown // 添加索引签名
}): Promise<ApiResponse<boolean>> {
  return post<boolean>('/user/forget-password/step2', data)
}
